home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / libs / hobbes3 / lines.c < prev    next >
C/C++ Source or Header  |  1992-08-17  |  3KB  |  138 lines

  1. #include"hobbes.h"
  2.  
  3. void PixelPattern(int x, int y, PATTERN p) {
  4.     RectangleFillPattern(x,y,x+1,y+1,p);
  5. }
  6.  
  7. void PixelPatternClip(int x, int y, PATTERN p) {
  8.     RectangleFillPatternClip(x,y,x+1,y+1,p);
  9. }
  10.  
  11. void HLinePattern(int x0, int x1, int y, PATTERN p) {
  12.     RectangleFillPattern(x0, y, x1+1, y+1, p);
  13. }
  14.  
  15. void HLinePatternClip(int x0, int x1, int y, PATTERN p) {
  16.     RectangleFillPatternClip(x0, y, x1+1, y+1, p);
  17. }
  18.  
  19. void VLinePattern(int x, int y0, int y1, PATTERN p) {
  20.     RectangleFillPattern(x, y0, x+1, y1+1, p);
  21. }
  22.  
  23. void VLinePatternClip(int x, int y0, int y1, PATTERN p) {
  24.     RectangleFillPatternClip(x, y0, x+1, y1+1, p);
  25. }
  26.  
  27.  
  28.  
  29. void LineClip(int x0, int y0, int x1, int y1, COLOR color) {
  30.     int temp, c;
  31.  
  32.     if (x0 > x1) {
  33.         temp = x0;
  34.         x0 = x1;
  35.         x1 = temp;
  36.         temp = y0;
  37.         y0 = y1;
  38.         y1 = temp;
  39.         }
  40.  
  41.     if ((x0 < ClipLeft) && (x1 < ClipLeft))         return;
  42.     if ((x0 > ClipRight) && (x1 > ClipRight))         return;
  43.     if ((y0 < ClipTop) && (y1 < ClipTop))             return;
  44.     if ((y0 > ClipBottom) && (y1 > ClipBottom))     return;
  45.  
  46.     if (x0 < ClipLeft) {
  47.         {c = (y1 - y0) / (x1 - x0) * (x1 - ClipLeft);
  48.         x0 = ClipLeft;
  49.         y0 = y1 - c;};
  50.         if ((y0 < ClipTop) && (y1 < ClipTop))         return;
  51.         if ((y0 > ClipBottom) && (y1 > ClipBottom)) return;
  52.         }
  53.  
  54.  
  55.     if (x1 > ClipRight) {
  56.         c = (y1 - y0) / (x1 - x0) * (ClipRight - x0);
  57.         x1 = ClipRight;
  58.         y1 = y0 + c;
  59.         if ((y0 < ClipTop) && (y1 < ClipTop))         return;
  60.         if ((y0 > ClipBottom) && (y1 > ClipBottom)) return;
  61.         }
  62.  
  63.  
  64.     if (y0 > y1) {
  65.         temp = y0;
  66.         y0 = y1;
  67.         y1 = temp;
  68.         temp = x0;
  69.         x0 = x1;
  70.         x1 = temp;
  71.         }
  72.  
  73.     if (y0 < ClipTop) {
  74.         c = (x1 - x0) / (y1 - y0) * (y1 - ClipTop);
  75.         x0 = x1 - c;
  76.         y0 = ClipTop;
  77.         }
  78.  
  79.     if (y1 > ClipBottom) {
  80.         c = (x1 - x0) / (y1 - y0) * (ClipBottom - y0);
  81.         x1 = x0 + c;
  82.         y1 = ClipBottom;
  83.         }
  84.  
  85.     Line(x0,y0,x1,y1,color);
  86. }
  87.  
  88.  
  89. /*
  90. void MyLine (int x0, int y0, int x1, int y1, int color) {
  91.  
  92.     int     x;
  93.     float    dx, dy, y, m;
  94.  
  95.     dy = y1-y0;
  96.     dx = x1-x0;
  97.     m = dy/dx;
  98.     y=y0;
  99.  
  100.     for(x=x0; x<=x1; x++) {
  101.         PixelClip(x, y, color);
  102.         y=y+m;
  103.     }
  104. }
  105.  
  106. void MyLine2 (int x0, int y0, int x1, int y1, int color) {
  107.  
  108.     int dx, dy,
  109.         incrE, incrNE,
  110.         d, x, y;
  111.  
  112.     if (x0 == x1)
  113.         VLineClip(x0,y0,y1,color);
  114.     if (y0 == y1)
  115.         HLineClip(x0,x1,y0,color);
  116.     dx = x1-x0;
  117.     dy = y1-y0;
  118.     d = 2*dy-dx;
  119.     incrE = 2*dy;
  120.     incrNE = 2*(dy-dx);
  121.     x = x0;
  122.     y = y0;
  123.     PixelClip(x,y,color);
  124.     while (x<x1) {
  125.         if (d <= 0) {
  126.             d+=incrE;
  127.             x++;
  128.             }
  129.           else {
  130.             d+=incrNE;
  131.             x++;
  132.             y++;
  133.             }
  134.         PixelClip(x,y,color);
  135.     }
  136. }
  137.  
  138. */